package com.jxd.reportsys.service;

import com.jxd.reportsys.model.Report;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Objects;

public interface IReportService {

    /**
     * 根据部门编号和报工日期查询未审核的报工信息总结
     * @param deptno 查询的部门编号
     * @param reportdate 查询的报工日期
     * @return 未审核的报工信息总结
     */
    List<Map<String, Object>> getDeptReportSummary(@Param("deptno") int deptno,
                                                   @Param("reportdate") String reportdate);

    /**
     * 根据map中的条件获取报工信息
     * @param map 条件map
     * @return 报工信息集合
     */
     List<Map<String, Object>> getReport(@Param("map") Map<String, Object> map);

    /**
     * 根据map中的条件获取报工信息总条数
     * @param map 条件map
     * @return 总条数
     */
    int getCount(@Param("map") Map<String, Object> map);

    /**
     * 审核报工信息，修改审核状态
     * @param map 员工编号、报工日期、提交/驳回
     * @return 是否修改成功
     */
    boolean auditReport(@Param("map") Map<String, Object> map);

    /**
     * 批量审核报工信息，修改审核状态
     * @param map 选中行信息集合、提交/驳回、申请人工号、驳回原因
     * @return 是否修改成功
     */
    boolean auditReportByBatch(@Param("list") Map<String, Object> map);

    /**
     * 根据条件查询所有漏报日期
     * @param map 查询条件
     * @return 未报日期即驳回原因集合
     */
    List<Map<String, Object>> getAllFailReportdate(@Param("map") Map<String, Object> map);


    /**
     * 根据员工编号查询所有报工日期
     * @param empno 员工编号
     * @param hiredate  入职日期
     * @return 报工日期集合
     */
    List<String> getAllReportdate(@Param("empno") int empno, @Param("hiredate") String hiredate);

    /**
     * 根据员工编号和报工日期获取报工信息
     * @param empno 员工编号
     * @param reportdate 报工日期
     * @return 报工信息
     */
    Report getReportByEmpnoAndReportdate(@Param("empno") int empno, @Param("reportdate") String reportdate);

    /**
     * 新增报工
     * @param report 要新增的报工信息
     * @return 是否新增成功
     */
    boolean addReport(@Param("report") Report report);

    /**
     * 修改报工信息
     * @param report 要修改的报工信息
     * @return 是否修改成功
     */
    boolean updateReport(@Param("report") Report report);
}
